import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';
import { useCallback } from 'react';
import type { RootState, AppDispatch } from './index';
import auth from '../utils/auth';

// 使用类型化的hooks来代替普通的useDispatch和useSelector
export const useAppDispatch = () => useDispatch<AppDispatch>();
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;

/**
 * 权限检查钩子 - 基于auth.ts实现
 * @param permissionKey 权限键
 * @returns 是否拥有权限
 */
export const usePermission = (permissionKey: string): boolean => {
  return auth.hasPermission(permissionKey);
};

/**
 * 获取当前用户区域的钩子 - 基于auth.ts实现
 * @returns 用户区域
 */
export const useUserRegion = (): string => {
  return auth.getUserRegion();
};

/**
 * 检查用户是否可以操作某条数据 - 基于auth.ts实现
 * @returns 检查函数
 */
export const useDataPermission = () => {
  const canAccess = useCallback((data: Record<string, unknown>) => {
    // 如果没有当前用户信息，拒绝访问
    if (!auth.getUserInfo()) return false;

    // 超级管理员可以访问所有数据
    if (auth.isSuperAdmin()) {
      return true;
    }
    
    // 区域管理员可以访问本区域数据
    if (auth.isRegionAdmin()) {
      return data.region === auth.getUserRegion();
    }
    
    // 普通用户只能访问自己创建的数据
    return data.author === auth.getUsername() || 
           data.createdBy === auth.getUserInfo()?.id;
  }, []);
  
  return { canAccess };
};

/**
 * 获取用户登录状态 - 基于auth.ts实现
 * @returns 是否已登录
 */
export const useIsLoggedIn = (): boolean => {
  return auth.isAuthenticated();
};

/**
 * 获取当前用户信息 - 基于auth.ts实现
 * @returns 用户信息
 */
export const useCurrentUser = () => {
  return auth.getUserInfo();
}; 